package com.homework;

/**
 * @Author 小闽
 * @Date 2024/9/22 11:17
 * @PackageName: com.homework
 * @ClassName: HomeWork04
 * @Description: 练习4
 * @Version 1.0
 */
public class HomeWork04 {
    public static void main(String[] args) {
        /**
         * 1. 计算器接口具有work方法，功能是运算，有一个手机类Cellphone,定义方法testWork测试计算功能，
         *    调用计算接口的work方法。
         * 2. 要求调用CellPhone对象的testWork方法，使用上匿名内部类。
         */

        // 需求分析：
        //1. 先定义一个接口叫CalculationInterface里面有一个work方法,功能运算
        //2. 定义一个手机类叫CellPhone，里面有一个方法叫testWork用于测试计算功能
        //3. 在testWork方法中去调用接口匿名内部类中的方法


        CellPhone cellPhone = new CellPhone();
        // 在这里通过匿名内部类参数去实现接口中work()方法的具体的实现
        cellPhone.testWork(new CalculationInterface() {
            @Override
            public double work(double n1, double n2) {
                return n1 + n2;
            }
        },10,20);
        cellPhone.testWork(new CalculationInterface() {
            @Override
            public double work(double n1, double n2) {
                return n1 * n2;
            }
        }, 10, 2);
    }
}
// 计算接口
interface CalculationInterface{
    // 运算功能work()方法
    double work(double n1, double n2);
}
// 方式一可以，但是这样不够灵活
// 手机类
//class CellPhone{
//    // 测试计算功能
//    public double  testWork(double n1, double n2){
//        // 在这里实现基于接口的匿名内部类，这里calculationInterface的编译类型是CalculationInterface
//        // 但是运行类型是一个匿名内部类,也就是CellPhone$1这个内部类
//        CalculationInterface calculationInterface = new CalculationInterface(){
//            // 实现具体的功能运算方法，传入两个参数n1和n2
//            @Override
//            public double work(double n1, double n2) {
//                double result = n1 + n2;
//                return result;
//            }
//        };
//        //在这里去调用接口的匿名内部类的方法
//       double  resutl = calculationInterface.work(n1, n2);
//       return resutl;
//    }
//}

// 方式二,这样能够更加灵活的计算不同功能的运算
class CellPhone{
    // 在这里传入一个接口参数，和对应的运算数值数据
    public void testWork(CalculationInterface calculationInterface, double n1, double n2){
        // 这里去调用work()方法,在这里会进行work()方法的动态绑定机制
        double result = calculationInterface.work(n1,n2);
        System.out.println("这里计算功能完毕,输出结果为" + result);
    }
}